Storage area networks, also known as SANs, facilitate sharing of storage devices with one or more different host server computer systems and applications. Fibre channel switches (FCSs) can connect host servers with storage devices creating a high speed switching fabric. Requests to access data pass over this switching fabric and onto the correct storage devices through logic built into the FCS devices. Host servers connected to the switching fabric can quickly and efficiently share blocks of data stored on the various storage devices connected to the switching fabric.
Storage devices can share their storage resources over the switching fabric using several different techniques. For example, storage resources can be shared using storage controllers that perform storage virtualization. This technique can make one or more physical storage devices, such as disks, which comprise a number of logical units (sometimes referred to as “physical LUNs”) appear as a single virtual logical unit or multiple virtual logical units, also known as VLUNs. By hiding the details of the numerous physical storage devices, a storage virtualization system having one or more such controllers advantageously simplifies storage management between a host and the storage devices. In particular, the technique enables centralized management and maintenance of the storage devices without involvement from the host server.
In many instances it is advantageous to place the storage virtualization controller(s) in the middle of the fabric, with the host servers and controllers arranged at the outer edges of the fabric. Such an arrangement is generally referred to as a symmetric, in-band, or in-the-data-path configuration. It is often the case that many different components distributed over the storage area network operate together to fulfill a particular request and deliver the storage. Generally, these components can deliver requested data or data processing results within a time frame unless an error or other malfunction has occurred. Accordingly, many processes operating with the storage network have a time out interval that the process needs to complete the operation or receive a time out event. This time out event is used to indicate that the event on the storage network has failed and needs to be restarted or investigated.
During operation, the storage virtualization controller receives requests from applications, users and other systems for different amounts of storage from the storage area network. The storage virtualization controller identifies one or more storage devices on the storage network to fulfill each request and delivers the storage as a VLUN. The application, user or other systems use the VLUN to access and use the storage on the storage area network in the same way as other types of storage. As previously described, the VLUN hides the details of the underlying complex storage area network and simplifies administration of complex storage systems.
Unfortunately, identifying and allocating storage from the storage area network in an efficient and cost-effective manner is a complex and difficult process. The storage virtualization controller needs to manage a larger number of storage devices having different operating characteristics and available storage sizes. For any given storage request, the controller may need to determine the most optimal allocation to use given there may be many different ways to allocate the storage. In some cases, the storage allocation may be more cost effective yet not provide the level of reliability a user has required. Alternatively, other storage allocations may provide the requested reliability but not use the storage resources efficiently and in a cost-effective manner for the storage area network operator. Conventional approaches to provisioning storage may perform many thousands of computations to find a provisioning solution. These “brute force” approaches to provisioning may identify a reasonable solution yet the large computational requirements make them unacceptably slow for use in most applications.
For these and other reasons, it is therefore desirable to create a system that provisions storage on a storage area network in a manner that utilizes storage efficiently yet performs the provisioning operation in a relatively short time frame.